/**
 * 
 */
package com.tomagency.cyberlab.server.request;

import java.util.List;

import javax.persistence.EntityManager;

import com.google.inject.Inject;
import com.tomagency.cyberlab.server.util.LoggingUtil;

import de.gammadata.basics.modelle.PersistenceDO;
import de.gammadata.persistence.GenericDAOImpl;
import de.gammadata.persistence.GenericDAO.SEARCHTYPE;
import de.gammadata.server.requestfactory.PersistenceLocator;

/**
 * @author gfr
 *
 */
public abstract class GenericRequestService<T extends GenericDAOImpl,E extends PersistenceDO> {
	

	
	public Long countAll() {
		EntityManager em=getEntityManager();
		long count=getDAO().countEntities(em);
		return count;
	}
	
	public List<E> findAll(int start,int limit) {
		EntityManager em=getEntityManager();
		List<E>liste=getDAO().findAll(start, limit, em);
		getLoggingUtil().getLogger(this.getClass()).debug("findAll() Liste mit "+liste.size()+" Einträgen gefunden");
		return liste;
	}
	
	public List<E> findByMatchString(String suchTxt) {
		EntityManager em=getEntityManager();
		List<E>liste=getDAO().findByMatchString(suchTxt,SEARCHTYPE.CONTAINS,0, 300, em);
		getLoggingUtil().getLogger(this.getClass()).debug("findByMatchString("+suchTxt+") Liste mit "+liste.size()+" Einträgen gefunden");
		return liste;
	}
	
	public E find(Integer id){
		EntityManager em=getEntityManager();
		E result=(E) getDAO().findById(id, em);
		return result;
	}
	
	public E findFull(Integer id){
		return find(id);
	}
	
	public EntityManager getEntityManager(){
		return PersistenceLocator.getEntityManager();
		
	}
	
	public abstract T getDAO();
	
	public abstract LoggingUtil getLoggingUtil();

}
